import axios from 'axios'
import store from '@/store'
import request from '@/utils/request'
import { Notification } from 'element-ui';
import { getToken } from '@/utils/auth'
import Push from 'push.js'


const Sync = {
    source: null,
    isDisconnect: true,
    connect(){
        this.isDisconnect = false
        if (getToken()) {
            this.sync()
        }
    },
    sync() {
        if(this.isDisconnect) return
        const CancelToken = axios.CancelToken;
        this.source = CancelToken.source();

        request.post("api/sync", {}, {
            cancelToken: this.source.token,
            timeout: 35000,
            params: {
                format: "sync"
            }
        }).then(events => {
            
            console.log(events)
            events.forEach(msg => {
                const data = msg.data;
                try {
                    this.invokes[msg.biz][msg.action](data);
                } catch (e) {
                    console.error(e);
                }
            });
        })
        .catch(err => {
            console.log(err)
        })
        .finally(() => {
            this.sync();
        });
    },
    disconnect(){
        this.isDisconnect = true;
        this.cancel();
    },
    cancel(){
        if(this.source)
            this.source.cancel();
    },
    invokes:{
        ORDER:{
            NEW(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '新订单['+ data +']'
                    Notification.info({
                        title: '您有新订单',
                        message: msg
                    })
                })
            }, 
            PAY(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']已支付'
                    Notification.info({
                        title: '有订单支付',
                        message: msg
                    })

                    Push.create("有新订单支付", {
                        body: "有新订单支付",
                        icon: './icon.png',
                        tiemout: 5000
                    })
                })
            }, 
            SHIP(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']已发货'
                    Notification.info({
                        title: '订单发货',
                        message: msg
                    })
                })
            }, 
            RECEIVE(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']已确认收货'
                    Notification.info({
                        title: '订单收货',
                        message: msg
                    })
                })
            },
            CANCEL(data) {
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']已取消'
                    Notification.info({
                        title: '订单已取消',
                        message: msg
                    })
                })
            },
            CLOSE(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']已关闭'
                    Notification.info({
                        title: '订单关闭',
                        message: msg
                    })
                })
            }, 
            FINISH(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']已完成'
                    Notification.info({
                        title: '订单完成',
                        message: msg
                    })
                })
            },
            CONFIRM_RECEIVE_INFO(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']已确认收货信息'
                    Notification.info({
                        title: '确认收货信息',
                        message: msg
                    })

                    Push.create("确认收货信息", {
                        body: "确认收货信息",
                        icon: './icon.png',
                        tiemout: 5000
                    })
                })  
            },
            RECEIVE_INFO(data) {
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']修改收货地址'
                    Notification.info({
                        title: '管理员修改收货地址',
                        message: msg
                    })
                })
            },
            AMOUNT_INFO(data) {
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']金额变化'
                    Notification.info({
                        title: '金额变化',
                        message: msg
                    })
                })
            },
            NOTE_INFO(data) {
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']备注修改'
                    Notification.info({
                        title: '备注修改',
                        message: msg
                    })
                })
            }
        },
        RETURNAPPLY:{
            NEW(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']已发起售后'
                    Notification.info({
                        title: '新售后订单',
                        message: msg
                    })

                    Push.create("有用户发起售后", {
                        body: "有用户发起售后",
                        icon: './icon.png',
                        tiemout: 5000
                    })
                })
            },
            ACCEPT(data) {
                store.dispatch('update_homeData').then(() => {
                    const msg = '订单['+ data +']已同意'
                    Notification.info({
                        title: '售后订单已同意',
                        message: msg
                    })
                })
            },
            SHIP(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '售后订单['+ data +']用户已发货'
                    Notification.info({
                        title: '售后订单发货',
                        message: msg
                    })
                })
            },
            SUP_RECEIVE(){
                store.dispatch('update_homeData').then(() => {
                    const msg = '售后订单['+ data +']供应商已确认收货'
                    Notification.info({
                        title: '供应商已确认收货',
                        message: msg
                    })
                })
            },
            REFUSE(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '售后订单['+ data +']已拒绝'
                    Notification.info({
                        title: '售后订单已拒绝',
                        message: msg
                    })
                })
            },
            CANCEL(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '售后订单['+ data +']已取消'
                    Notification.info({
                        title: '售后订单已取消',
                        message: msg
                    })
                })
            }, 
            FINISH(data){
                store.dispatch('update_homeData').then(() => {
                    const msg = '售后订单['+ data +']已完成'
                    Notification.info({
                        title: '售后订单完成',
                        message: msg
                    })
                })
            },
        },
        USER:{
            SAFE(data){
                console.log("SAFE:"+data)
                store.commit("user/SET_SAFE", data);
            },
            NOTICE(data){
                console.log("NOTICE:"+data);
            },
            WITHDRAW() {
                store.dispatch('update_homeData').then(() => {
                    Notification.info({
                        title: '用户提现',
                        message: '用户提现'
                    })
                })
            },
            REGISTER() {
                store.dispatch('update_homeData').then(() => {
                    Notification.info({
                        title: '通知',
                        message: '又有新用户注册啦'
                    })
                })
            }
        }
    }
}

export default Sync